首页 > 试题广场 >

质数因子

[编程题]质数因子
  • 热度指数:1102994 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2 3 3 5 )


数据范围:

输入描述:

输入一个整数



输出描述:

按照从小到大的顺序输出它的所有质数的因子,以空格隔开。

示例1

输入

180

输出

2 2 3 3 5
推荐
#include <iostream>

using namespace std;

int main(void)
{
    long input;
    //cin >> input;
    while (cin >> input)
    {
        while (input != 1)
        {
            for (int i = 2; i <= input; i++)
        	{
            	if (input % i == 0)
            	{
             	   input /= i;
             	   cout << i << ' ';
            	    break;
            	}
        	}
        }
        
    }
	
    
    
    return 0;
}



编辑于 2019-02-12 20:22:30 回复(102)
1.
2. 相同的质因数全部除掉,则排除具有该质因数的合因数
3. 除掉所有的质因数后,剩下的不为1的数为其质因数
import math

while True:
    try:
        n = int(input())
        for i in range(2, int(math.sqrt(n)+1)):
            while n % i ==0:
                print(i, end=' ')
                n = n // i
        if n != 1:
            print(n)
    except:
        break


编辑于 2024-03-21 15:53:57 回复(0)
为啥不对呢,大佬解答一下
var = int(input())


def f():
    global var
    for i in range(2, var):
        while var % i == 0:
            print(i, end=' ')
            var = var // i
            f()


f()

编辑于 2024-03-08 19:19:27 回复(0)
a = int(input())

def sub(num):
    if num % 2 == 0:
        return 2, num // 2
    else:
        i = 1
        while (2 * i + 1)*2 * i + 1 <= num:
            if num % (2 * i + 1) == 0:
                return 2 * i + 1, num // (2 * i + 1)
            i = i + 1
    return 0, num

s_list = []
s1, s2 = sub(a)
while s1 != 0:
    s_list.append(s1)
    s1, s2 = sub(s2)
if s2 > 1:
    s_list.append(int(s2))

print(' '.join(str(s) for s in s_list))

发表于 2024-01-15 14:33:07 回复(0)
import sys
strs = int(input())
k = 2
lis = []
s = strs
for i in range(0, strs):
    y1 = int(s % k)
    if y1 == 0:
        s = int(s / k)
        y1 = s
        lis.append(k)
    elif y1 != 0:
        k += 1
    if s == 1:
        break
# print(lis)
s_new = ""
for i in lis:
    s_new = s_new + str(i) + " "
print(s_new)
发表于 2023-11-15 17:15:51 回复(0)
from math import sqrt
a = int(input())
for i in range(2,a)[:int(sqrt(a))+1]:
        while a % i == 0:
            print(i, end=' ')
            a //= i

if a != 1:
    print(a)

发表于 2023-08-04 23:33:13 回复(0)
n=int(input())
flag=0
for m in range(2,594):
   for k in range(4):
       if n%m==0:
           print(m,end=' ')
           n=n/m 
           flag=flag+1
if flag==0:
    print(n)
if flag!=0 and n>1:
    print(int(n))
##面向答案编程
发表于 2022-12-04 17:23:17 回复(0)
def factor(N):
    res = []
    if N > 1:
        c = int(N**0.5)
        while N % c:
            c = c - 1
        if c == 1:
            res.append(int(N))  # int !!!!!
        else:
            res = res + factor(c)
            res = res + factor(N / c)

    return res


if __name__ == "__main__":
    N = int(input())
    res = sorted(factor(N))
    res = list(map(str, res))
    print(" ".join(res))

发表于 2022-11-18 14:37:51 回复(0)
为什么质因子判断到平方根就可以了呢?
发表于 2022-09-06 22:16:53 回复(0)
# 循环次数较多,有一组大数过不了
num = int(input())
while True:
    for i in range(2,num+1):
        if num % i == 0:
            num = int(num/i)
            print(i, end=" ")
            break
    if num == 1:
        break
发表于 2022-08-29 21:35:37 回复(0)
import math
num = int(input())
prime = 2
s = ''
while prime < math.sqrt(num) + 1:
    if num%prime != 0:
        prime += 1
    else:
        num=num//prime
        s = s + str(prime) + ' '
s = s + str(num)
print(s)

发表于 2022-08-28 16:50:57 回复(0)
num=int(input())
for i in range(2,int(num**0.5+1)):
    while num%i==0:
        print(i,end=' ')
        num=num//i
if num!=1:
    print(num)
发表于 2022-08-27 22:07:24 回复(0)
num=int(input())
lst=[]
while num%2==0:
    lst.append(2)
    num=num//2
while num%3==0:
    lst.append(3)
    num=num//3
while num%5==0:
    lst.append(5)
    num=num//5
while num%7==0:
    lst.append(7)
    num=num//7
while num%17==0:
    lst.append(17)
    num=num//17
while num%13==0:
    lst.append(13)
    num=num//13
while num%23==0:
    lst.append(23)
    num=num//23
while num%107==0:
    lst.append(107)
    num=num//107
if num!=1:
    lst.append(num)
lst.sort
for j in lst:
    print(j,end=' ')

for i in range(7,num//30):

    if num%i==0:
        lst.append(i)

        num=num//i

就一直提醒超时,对着答案一个一个写出来,就能全部通过啦
发表于 2022-08-22 22:21:27 回复(0)
import math
def is_prime():
    n = int(input())
    loop = int(math.sqrt(n))+1
    for i in range(2,loop):
        while n % i == 0:
            print(i,end=' ')
            n = n // i 
    if n > 2:
        print(n)
if __name__ == '__main__':
    is_prime()
发表于 2022-08-22 03:19:11 回复(0)
import math
x=int(input())
y=int(x**0.5+1)
z=[]
for i in range(2, y):
    while x%i==0:
        x=x/i
        z.append(i)
if x!=1:
    z.append(int(x))
if z:
    for i in range(len(z)):
        print(z[i],end=" ")
else:
    print(x)
发表于 2022-08-20 09:16:35 回复(0)
num = int(input())

def func(num):
    prime_num=1
    for i in range (2,int(num**0.5+2)):
        if num%i == 0:
            prime_num=0
            b = int(num/i)
            print (str(i),end=' ')
            func(b)
            break
    if prime_num ==1:
        print(str(num),end=' ')
        
func(num)
这个Python3排行第一的代码是不是有问题,当输入的数为4,8这种的时候输出会多一个1出来,例如输入4,输出为2 2 1,实际应该为2 2才对
发表于 2022-08-11 02:44:51 回复(0)
def zhishu(num):
    if num==2:
        return num
    else:
        for i in range(2,int(num**0.5)+1):
            if num%i==0:
                return 0
                break
        return num             


def shuchu(n,start):
    if zhishu(n)==n:
        print(n,end=' ')
    else:
        for j in range(start,int(n**0.5)+1):
                if zhishu(j)==j:
                    if n%j==0:
                        print(j,end=' ')
                        n=n//j
                        start=j
                        shuchu(n,start)
                
if __name__=='__main__':   
    a=int(input())
    sum=0
    start=2
    shuchu(a,start)
有大佬知道为啥这样错的吗,每次到最后一位了以后,他会突然开始做乘法

发表于 2022-08-10 11:40:46 回复(0)
num=int(input())

#质数因子实际上不停的使用指数去除,注意开根号,不是中位数
for i in range(2,round(num**0.5)+1):
    while num%i==0:
        print(i,end=" ")
        num=num//i
if num!=1:
    print(num,end=" ")

    

发表于 2022-07-26 22:39:37 回复(0)